package com.akami.admin;
import java.util.Enumeration;
import java.util.HashMap;
import java.util.Hashtable;

import javax.servlet.http.*;

import xframe.util.CookieUtil;
import xframe.util.UtilMaster;

public class LoginManager implements HttpSessionBindingListener
{
    private static LoginManager loginManager = null;
    private static Hashtable loginUsers = new Hashtable();
    private LoginManager(){
                  super();
    }
    public static synchronized LoginManager getInstance(){
                  if(loginManager == null){
                               loginManager = new LoginManager();
                  }
                  return loginManager;
    }

    //아이디가 맞는지 체크
    public boolean isValid(String userID, String userPW){
                  return true;   //자세한 로직은 미구현
    }

    //해당 세션에 이미 로그인 되있는지 체크
    public Hashtable getUserList(){
                  Enumeration e = loginUsers.keys();
                  String key = "";
                  while(e.hasMoreElements()){
                   key = (String)e.nextElement();
                   System.out.println("key : "+key);
                   }
                  return loginUsers;
    }

    //중복 로그인 막기 위해 아이디 사용중인지 체크
    public boolean isLoggin(HttpSession session, HttpServletRequest request, HttpServletResponse response){
                  boolean isUsing = false;
                  String com ="recipe.com";
                  String cookie_id;
				try {
					cookie_id = CookieUtil.getCookie(request,com+"-"+"session");
					

	      			//1.로그인 되어 있는 세션인지 확인한다.
	      			if(cookie_id == null){
	          			//## 로그인되어 있지 않으면 새로운 단말기의 유저이다.
	                    CookieUtil.setCookie(response, com+"-"+"session", session.getId(), -1);
	                    System.out.println("새로운 세션이 형성되었습니다.");
	                    isUsing = false;
	                    setSession(session, request);
	      			}else{
	      			//로그인 되어있다면 사용자 정보를 추가하지 않는다.
	      			//즉, 아무것도 하지 않는다.
	      				System.out.println("로그인 되어있는 세션정보입니다.");
	      				isUsing = true;
	      			}
	      			
				} catch (Exception e) {
					e.printStackTrace();
				}
                  
                  return isUsing;
    }

    //세션 생성
    private void setSession(HttpSession session, HttpServletRequest request){
    	 
    			  if(!loginUsers.containsKey(session.getId())){
    				  loginUsers.put(session.getId(), UtilMaster.getToday("kk:mm:ss"));
    				  session.setMaxInactiveInterval(60*3);
    				  session.setAttribute("login", this.getInstance());
    				  System.out.println("새로운 세션이 형성되었습니다."+loginUsers.containsKey(session.getId()));
    			  }
                  
    }

    //세션 성립될 때 
    public void valueBound(HttpSessionBindingEvent event){
    }

    //세션 끊길때
    public void valueUnbound(HttpSessionBindingEvent event){
                  loginUsers.remove(event.getSession().getId());
    }

    //세션 ID로 로긴된 ID 구분
    public String getUserID(String sessionID){
                  return (String)loginUsers.get(sessionID);
    }

    //현재 접속자수
    public int getUserCount(){
                  return loginUsers.size();
    }
};
